package com.jt.zcdemo.common;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.TemplateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;

import java.util.Collections;

public class MybatisPlusGenerator {

    private static final String url = "jdbc:dm://58.56.76.229:5236/dm_test?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8";

    private static final String username = "SYSDBA";

    private static final String password = "hTjT@1234";



    void mybatisPlusGenerator() {
        FastAutoGenerator
                // 数据源配置
                .create( url,
                        username,     // 达梦数据库模式名
                        password	// 密码
                )
                // 全局配置
                .globalConfig(
                        builder -> {
                            builder
                                    .author("xxx")              // 作者
                                    .outputDir(System.getProperty("user.dir") + "/src/main/java")    // 指定输出目录
                                    .commentDate("yyyy-MM-dd")                                // 注释的日期
                                    // 修改Date类型为LocalDateTime
                                    //.dateType(DateType.ONLY_DATE)
                                    //.enableSwagger()
                                    .disableOpenDir();                                            // 禁止打开输出目录，默认：true
                        }
                )
                // 包配置
                .packageConfig(
                        builder -> {
                            builder
                                    //.moduleName(System.getProperty("user.dir").substring(System.getProperty("user.dir").lastIndexOf("\\") + 1))   // 设置父包模块名
                                    .parent("com.jt.zcdemo")           // 父包名
                                    .moduleName("student")
                                    .entity("pojo.entity")                                          // 实体类包名
                                    .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper"))   // 设置 mapperXml 生成路径
                                    .build();

                        }
                )
                // 模板配置
//                .templateConfig(builder -> {
//                    builder.disable(TemplateType.CONTROLLER); //不生产相关代码
//                })
                // 策略配置
                .strategyConfig(
                        builder -> {
                            builder
                                    // 在这里添加数据库表名
                                    .addInclude("USER_INFO")                       // 设置需要生成的表名，多个表之间可以用逗号隔开
                                    // .addExclude("BBZQ_USER","BBZQ_USER_LOG")
                                    .controllerBuilder()          // controller配置策略
                                    .serviceBuilder().formatServiceFileName("%sService")            // service配置策略
                                    .mapperBuilder().enableBaseColumnList().enableBaseResultMap().enableMapperAnnotation()     // mapper配置策略
                                    .entityBuilder().enableLombok().enableRemoveIsPrefix().disableSerialVersionUID().enableTableFieldAnnotation()       // 实体配置策略
                                    .logicDeleteColumnName("is_deleted")        		  // 逻辑删除字段名
                                    .naming(NamingStrategy.underline_to_camel)            // 数据库表映射到实体的命名策略，下划线转驼峰
                                    .columnNaming(NamingStrategy.underline_to_camel)      // 数据库表字段映射的命名策略，下划线转驼峰
//                                    .addTableFills(    // 添加表字段填充，"create_time"自动填充为插入时间，"update_time"自动填充为修改时间
//                                            new Column("create_time", FieldFill.INSERT),
//                                            new Column("update_time", FieldFill.INSERT_UPDATE)
//                                    )
//                                    .idType(IdType.AUTO);
                             ;
                        }
                )
                // 模板配置
                .templateEngine(new VelocityTemplateEngine())    // 使用的是默认的 Velocity 引擎模板
                // 执行
                .execute();
    }

    public static void main(String[] args) {
        new MybatisPlusGenerator().mybatisPlusGenerator();
    }

}
